iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

Viem 介紹系列 第 5

Day5 - Introduction to Transports

  • 分享至 

  • xImage
  •  

Transports

傳輸方式主要分四種

  • HTTP
  • WebSocket
  • Custom (EIP-1193)
  • Fallback

上面的三種傳輸方式大同小異

引用方式 & 範例

import { createPublicClient, createWalletClient, http, webSocket, custom } from 'viem'
import { mainnet } from 'viem/chains'

// https
const transport = http('https://eth-mainnet.g.alchemy.com/v2/...')
// webstock
// const transport = webSocket('wss://eth-mainnet.g.alchemy.com/v2/...')

const client = createPublicClient({
  chain: mainnet,
  transport,
})

// Custom 
const clientWallect = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum)
})

特別要提一下 httpbatch 是專屬的屬性,如果設定為 true 將會把下列的請求一當作一次請求

// The below will send a single Batch JSON-RPC HTTP request to the RPC Provider.
const [blockNumber, balance, ensName] = await Promise.all([
  client.getBlockNumber(),
  client.getBalance({ address: '0xd2135CfB216b74109775236E36d4b433F1DF507B' }),
  client.getEnsName({ address: '0xd2135CfB216b74109775236E36d4b433F1DF507B' }),
])

Fallback

這個傳輸方式要特別寫出來因為很特別!!

簡單的來說這一種傳輸方式會以陣列幫你選用目前傳輸正常的傳輸 url

以下是簡單範例

import { createPublicClient, fallback, http } from 'viem'
import { mainnet } from 'viem/chains'

const alchemy = http('https://eth-mainnet.g.alchemy.com/v2/...')
const infura = http('https://mainnet.infura.io/v3/...')

const client = createPublicClient({
  chain: mainnet,
  transport: fallback([alchemy, infura]),
	{ rank: true }
})
// 上面範例如果 alchemy 請求失敗便會,排列infura 使用

其中有一個屬性要說一下 { rank: true } 這個屬性是可以依照你設定的 url 穩定性來調用哪一個 url ,也就是說他會用設定上最穩的的傳輸為優先,算是很實用的方法畢竟我們知道穩定的連線才是我們調用區塊鏈訊息最大的關鍵。

// 屬性解釋
    rank: {
      interval: 60_000, // 每 60 秒會 ping 設定的傳輸
      sampleCount: 5,   // 會依據過去 5 次 ping 根據 穩定度&響應速度去排名
      timeout: 500,     // 傳輸的採樣時間
      weights: {
        latency: 0.3,   // 延遲比重 0.3
        stability: 0.7  // 穩定比重 0.7
      }
    }

希望這個能幫助大家了解。

參考:
https://viem.sh/docs/clients/transports/http.html
https://viem.sh/docs/clients/transports/websocket.html
https://viem.sh/docs/clients/transports/custom.html
https://viem.sh/docs/clients/transports/fallback.html


上一篇
Day4 - Introduction to Clients (2) - Wallet Client & Test Client
下一篇
Day 6 - Public Action (1)
系列文
Viem 介紹11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言